package main

import (
	"fmt"
	"net"
)

func main() {
	listener, err := net.Listen("tcp", "127.0.0.1:8001")
	if err != nil {
		fmt.Println("listen error", err)
		return
	}

	defer listener.Close()

	for {
		fmt.Println("等待客户端连接...")
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("accept error", err)
			return
		}

		//具体完成服务器和客户端的通信
		go HandleConnect(conn)
	}
}

func HandleConnect(conn net.Conn) {
	defer conn.Close()

	//获取连接的客户端的Addr
	addr := conn.RemoteAddr()
	fmt.Println(addr, "客户端成功连接")

	for {
		buf := make([]byte, 4096)
		n, err := conn.Read(buf)
		if "exit\n" == string(buf[:n]) || "exit\r\n" == string(buf[:n]) {
			fmt.Println("服务器接收到客户端退出的请求，关闭连接!")
			return
		}
		if n == 0 {
			fmt.Println("服务器检测到客户端已关闭，断开连接!")
			return
		}
		if err != nil {
			fmt.Println("read error", err)
			return
		}
		fmt.Println("read data:", string(buf[:n]))

		str := fmt.Sprintf("服务端回发：%s", string(buf[:n]))
		conn.Write([]byte(str))

	}

}
